package cn.virens.oauth.subject;

import cn.virens.common.exception.APIException;
import cn.virens.oauth.request.principal.DelegatePrincipal;

import java.time.LocalDateTime;

public interface Subject {

    /**
     * 检查是否拥有权限(OR)
     */
    public boolean hasPermissions(String... permissions) throws APIException;

    /**
     * 检查是否拥有角色(OR)
     */
    public boolean hasRoles(String... roleIdentifiers) throws APIException;

    /**
     * 获取当前用户信息
     */
    public DelegatePrincipal delegate() throws APIException;

    /**
     * 退出登录
     */
    public DelegatePrincipal logout() throws APIException;

    /**
     * 获取当前用户信息-授权过期时间
     */
    public LocalDateTime getExpireTime();

    /**
     * 获取当前用户信息-授权重置时间
     */
    public LocalDateTime getRetryTime();

    /**
     * 获取当前用户信息-授权时间
     */
    public LocalDateTime getLoginTime();

    /**
     * 获取当前用户信息-授权标识
     */
    public String getLoginAuth();

    /**
     * 获取当前用户信息-租户权限
     */
    public Boolean getTenantSuper();

    /**
     * 获取当前用户信息-租户名称
     */
    public String getTenantName();

    /**
     * 获取当前用户信息-租户编号
     */
    public String getTenantId();

    /**
     * 获取当前用户信息-部门名称
     */
    public String getDepartName();

    /**
     * 获取当前用户信息-部门编号
     */
    public String getDepartId();

    /**
     * 获取当前用户信息-区域名称
     */
    public String getAreaName();

    /**
     * 获取当前用户信息-区域编号
     */
    public String getAreaId();

    /**
     * 获取当前用户信息-角色名称
     */
    public String getRoleName();

    /**
     * 获取当前用户信息-角色编号
     */
    public String getRoleId();

    /**
     * 获取当前用户信息-用户头像
     */
    public String getAvatar();

    /**
     * 获取当前用户信息-用户名称
     */
    public String getUname();

    /**
     * 获取当前用户信息-用户编号
     */
    public String getUuid();

}
